package main

import (
	"GoCrontab/crontab/master"
	"flag"
	"fmt"
	"runtime"
	"time"
)

// golang基于协程的多线程。协程建立在线程上，且golang的协程会被调度在线程上，
//多核优势必须与cpu核心数量相等

//如果用goland启动master，仍然会提示open ./master.json: The system cannot find the file specified因为默认设置的工作目录为gopath目录，需要在ide的run/debug editConfiguration上配置一下,working directory 设置为F:\GitClone\GoCrontab\crontab\master\main包下即可
func initEnv() {
	//初始化线程数，设置与cpu数量相等
	runtime.GOMAXPROCS(runtime.NumCPU())
}

var (
	configFile string
)

//初始化命令行参数
func initCommandLineArgs() {
	// master -config ./master.json
	// master -h
	flag.StringVar(&configFile, "-config", "./master.json", "-config ./your.json")

	flag.Parse()
	fmt.Println("解析命令行完成")
	//file, _ := exec.LookPath(os.Args[0])
	//fmt.Println("当前执行路径为 ",file)
}
func main() {

	var (
		err error
	)
	initCommandLineArgs()
	//初始化环境
	initEnv()

	//加载服务启动配置
	if err = master.InitConfig(configFile); err != nil {
		goto ERR
	}

	//初始化worker,并获取到存在的worker列表
	if err = master.InitWorkManager(); err != nil {
		goto ERR
	}

	if err = master.InitLogManager(); err != nil {
		goto ERR
	}

	//启动maser管理器&etcd连接服务）
	if err = master.InitJobManager(); err != nil {
		goto ERR
	}
	fmt.Println("InitJobManager 完成")
	//启动服api server http服务
	if err = master.InitApiServer(); err != nil {
		goto ERR
	}
	fmt.Println("InitApiServer 完成")
	//退出,保证上面的http server协程不退出

	for {
		time.Sleep(1 * time.Second)
	}

	//return

ERR:

	fmt.Println(err)
	//启动http service
}
